<?php
require_once "based.php";
require_once 'modelo.php';

class DisciplinasCTRL
{
    private $disciplinas;
    function __construct() 
    {
        $db = new BaseDatos(DBHOST, DBUSER, DBPASS, DBBASE);
        $datos = $db->selectAsociativo("SELECT * FROM disciplinas");
        unset($db);
        $this->disciplinas = array();
        foreach($datos as $dis)
            $this->disciplinas[]=new Disciplina($dis['id'], utf8_encode($dis['nombre']), $dis['minimo'], $dis['maximo']);

    }
    public function getDisciplinas()
    {
        return $this->disciplinas;
    }
    
    public function __destruct() 
    {
        foreach($this->disciplinas as $d)
            unset($d);
    }
}

class EstadoInscripcionesDisciplina
{
    private $estado, $cantidadInscriptos;
    function __construct($disciplina, $idUsuario) 
    {
        $this->inscriptos = array();
        
        $db = new BaseDatos(DBHOST, DBUSER, DBPASS, DBBASE);
        $this->cantidadInscriptos = $cantidad  = $db->selectUnico("SELECT count(id) FROM inscriptos WHERE id_usuario = $idUsuario AND id_disciplina = ".$disciplina->getId());
        unset($db);
        
        if($cantidad==0)
            $this->setEstado(EstadoInscripcionVacio::getInstancia ());
        else if ($cantidad < $disciplina->getMinimo())
            $this->setEstado (EstadoInscripcionInsuficiente::getInstancia ());
        else if ($cantidad >= $disciplina->getMinimo() && $cantidad < $disciplina->getMaximo())
            $this->setEstado (EstadoInscripcionOk::getInstancia());
        else if ($cantidad == $disciplina->getMaximo())
            $this->setEstado (EstadoInscripcionOptimo::getInstancia());
        else
        {
            // Volcado al log de errores
            die;
        }
    }
    public function getEstado() {
        return $this->estado;
    }

    public function setEstado($estado) {
        $this->estado = $estado;
    }

    public function getCantidadInscriptos() {
        return $this->cantidadInscriptos;
    }


}

class EstadoInscripcionOk
{
   static private $instancia = NULL;
   private function __construct() {}

   static public function getInstancia() 
   {
       if (self::$instancia == NULL) 
          self::$instancia = new EstadoInscripcionOk();
       return self::$instancia;
   }
   public function getAltImagen()
   {
       return "Hay suficientes inscriptos";
   }
   public function getDetalle()
   {
       return "Hay suficientes inscriptos para participar pero pueden agregrarse suplentes";
   }
   public function getIcono()
   {
       return "ok.png";
   }
} 


class EstadoInscripcionInsuficiente
{
   static private $instancia = NULL;
   private function __construct() {}

   static public function getInstancia() 
   {
       if (self::$instancia == NULL) 
          self::$instancia = new EstadoInscripcionInsuficiente();
       return self::$instancia;
   }
   public function getAltImagen()
   {
       return "Insuficiente cantidad de inscriptos";
   }
   public function getDetalle()
   {
       return "La cantidad de inscriptos no es suficiente para participar";
   }
   public function getIcono()
   {
       return "alert.png";
   }
} 

class EstadoInscripcionOptimo
{
   static private $instancia = NULL;
   private function __construct() {}

   static public function getInstancia() 
   {
       if (self::$instancia == NULL) 
          self::$instancia = new EstadoInscripcionOptimo();
       return self::$instancia;
   }
   public function getAltImagen()
   {
       return "Optimo";
   }
   public function getDetalle()
   {
       return "Todas las vacantes están cubiertas";
   }
   public function getIcono()
   {
       return "optimo.png";
   }
} 

class EstadoInscripcionVacio
{
   static private $instancia = NULL;
   private function __construct() {}

   static public function getInstancia() 
   {
       if (self::$instancia == NULL) 
          self::$instancia = new EstadoInscripcionVacio();
       return self::$instancia;
   }
   public function getAltImagen()
   {
       return "No hay inscriptos";
   }
   public function getDetalle()
   {
       return "No hay inscriptos hasta el momento";
   }
   public function getIcono()
   {
       return "error.png";
   }
} 

class ObtenerDisciplina
{
    static private $disciplina = NULL;
    private function __construct() {}

    static public function getInstancia($id_dis)
    {
        if (self::$disciplina == NULL) 
        {
             $db = new BaseDatos(DBHOST, DBUSER, DBPASS, DBBASE);
             $datos = $db->selectAsociativo("SELECT * FROM disciplinas WHERE id = $id_dis");
             unset($db);
             foreach($datos as $dis)
               self::$disciplina = new Disciplina($dis['id'], utf8_encode($dis['nombre']), $dis['minimo'], $dis['maximo']);
        }
        return self::$disciplina;
    }
 


    public function getDisciplina()
    {
        return self::disciplina;
    }
    
}

?>